package CY_InnerClass;

//获取成员内部类的两种方式
//1.直接创建对象
//2.对外部类编写方法，对外提供内部类方法(private)

public class Outer {           //定义一个外部类
    int a = 5;

    public class Inter {       //定义一个内部类
        int b = 10;            //1.使用方法:  Outer.Inter oi = new Outer().new Inter();
    }                          //         外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

    public Inter method(){     //2.若内部类的权限修饰符为private，则需要加入该方法，用于其他类使用
        return new Inter();    //Outer o = new Outer;
    }                          //System.out.println(o.method);   便如此使用
}

//内部类调用外部类成员变量
class Out {
    private int a = 10;

    public class In {
        private int a = 20;

        public void show(){
            int a = 30;
            //首先，若无重名的变量，直接调用即可
            System.out.println(a);//若直接写a，根据就近原则，会在本方法找到int a = 30，则打印输出30
            System.out.println(this.a);//运用this.则会找到本类中的int a = 20，则打印输出20
            System.out.println(Out.this.a);//不是继承关系，不能用super。
        }
    }
}
